package ai;

import client.ClientGUI;
import spel.Bord;
import spel.Knikker;
import spel.Zet;

public class MensStrategie implements Strategie {
	private Zet z;
	private ClientGUI g;

	/**
	 * Maakt een MensStrategie aan die zijn zetten opvraagt bij een GUI
	 * @param g de ClientGUI waarbij de zetten moeten worden opgevraagd
	 */
	public MensStrategie(ClientGUI g) {
		this.g = g;
		z = null;
	}

	@Override
	/**
	 * De Timeout wordt volledig genegeerd
	 */
	public void setTimeout(int time) {
		// Ignore the timeout

	}

	@Override
	/**
	 * Zal een zet bepalen door aan de GUI te vragen deze aan de gebruiker te vragen.
	 * Zal net zo lang wachten tot er een zet is gedaan
	 */
	public Zet getMove(Bord b, Knikker k) {
		g.addMessage("Kies een vakje om een knikker te plaatsen");
		z = new Zet(null, -1, -1, -1, null);
		g.getSet(this);

		synchronized (this) {
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		Zet tempzet = z;
		z = null;
		return tempzet;
	}
	/**
	 * Vult in dat de Gebruiker een knikker wil plaatsen op de positie x,y
	 * @param x x positie van de knikker
	 * @param y y positie van de knikker
	 */
	public void PlaatsKnikker(int x, int y) {
		if (z != null) {
			synchronized (this) {
				z.x = x;
				z.y = y;
			}

		}
	}
	/**
	 * Geeft aan dat de gebruiker een SubBord wil draaien en in welke richting
	 * Hierna gaat getMove verder en word de zet geretourneerd.
	 * @param index de index van het te draaien SubBord
	 * @param r De richting waarom het SubBord moet worden gedraaid.
	 */
	public void DraaiBord(int index, Zet.Richting r) {
		if (z != null) {
			synchronized (this) {
				z.index = index;
				z.richting = r;
				this.notify();
			}
		}
	}

}
